/**
* Copyright (C) 2008 Happy Fish / YuQing
*
* FastDFS Java Client may be copied only under the terms of the GNU Lesser
* General Public License (LGPL).
* Please visit the FastDFS Home Page http://www.csource.org/ for more detail.
*/

package com.hlf.common.oss.fastdfs;

/**
* C struct body decoder
* @author Happy Fish / YuQing
* @version Version 1.18
*/
public class StructGroupStat extends StructBase
{
    protected static final int FIELD_INDEX_GROUP_NAME            = 0;
    protected static final int FIELD_INDEX_TOTAL_MB              = 1;
    protected static final int FIELD_INDEX_FREE_MB               = 2;
    protected static final int FIELD_INDEX_TRUNK_FREE_MB         = 3;
    protected static final int FIELD_INDEX_STORAGE_COUNT         = 4;
    protected static final int FIELD_INDEX_STORAGE_PORT          = 5;
    protected static final int FIELD_INDEX_STORAGE_HTTP_PORT     = 6;
    protected static final int FIELD_INDEX_ACTIVE_COUNT          = 7;
    protected static final int FIELD_INDEX_CURRENT_WRITE_SERVER  = 8;
    protected static final int FIELD_INDEX_STORE_PATH_COUNT      = 9;
    protected static final int FIELD_INDEX_SUBDIR_COUNT_PER_PATH = 10;
    protected static final int FIELD_INDEX_CURRENT_TRUNK_FILE_ID = 11;

    protected static int fieldsTotalSize;
    protected static StructBase.FieldInfo[] fieldsArray = new StructBase.FieldInfo[12];

    static
    {
        int offset = 0;
        fieldsArray[FIELD_INDEX_GROUP_NAME] = new StructBase.FieldInfo("groupName", offset, ProtoCommon.FDFS_GROUP_NAME_MAX_LEN + 1);
        offset += ProtoCommon.FDFS_GROUP_NAME_MAX_LEN + 1;

        fieldsArray[FIELD_INDEX_TOTAL_MB] = new StructBase.FieldInfo("totalMB", offset, ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE);
        offset += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;

        fieldsArray[FIELD_INDEX_FREE_MB] = new StructBase.FieldInfo("freeMB", offset, ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE);
        offset += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;

        fieldsArray[FIELD_INDEX_TRUNK_FREE_MB] = new StructBase.FieldInfo("trunkFreeMB", offset, ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE);
        offset += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;

        fieldsArray[FIELD_INDEX_STORAGE_COUNT] = new StructBase.FieldInfo("storageCount", offset, ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE);
        offset += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;

        fieldsArray[FIELD_INDEX_STORAGE_PORT] = new StructBase.FieldInfo("storagePort", offset, ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE);
        offset += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;

        fieldsArray[FIELD_INDEX_STORAGE_HTTP_PORT] = new StructBase.FieldInfo("storageHttpPort", offset, ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE);
        offset += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;

        fieldsArray[FIELD_INDEX_ACTIVE_COUNT] = new StructBase.FieldInfo("activeCount", offset, ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE);
        offset += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;

        fieldsArray[FIELD_INDEX_CURRENT_WRITE_SERVER] = new StructBase.FieldInfo("currentWriteServer", offset, ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE);
        offset += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;

        fieldsArray[FIELD_INDEX_STORE_PATH_COUNT] = new StructBase.FieldInfo("storePathCount", offset, ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE);
        offset += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;

        fieldsArray[FIELD_INDEX_SUBDIR_COUNT_PER_PATH] = new StructBase.FieldInfo("subdirCountPerPath", offset, ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE);
        offset += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;

        fieldsArray[FIELD_INDEX_CURRENT_TRUNK_FILE_ID] = new StructBase.FieldInfo("currentTrunkFileId", offset, ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE);
        offset += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE;

        fieldsTotalSize = offset;
    }

    protected String groupName;  //name of this group
    protected long totalMB;      //total disk storage in MB
    protected long freeMB;       //free disk space in MB
    protected long trunkFreeMB;  //trunk free space in MB
    protected int storageCount;  //storage server count
  protected int storagePort;   //storage server port
  protected int storageHttpPort; //storage server HTTP port
  protected int activeCount;     //active storage server count
  protected int currentWriteServer; //current storage server index to upload file
  protected int storePathCount;     //store base path count of each storage server
  protected int subdirCountPerPath; //sub dir count per store path
    protected int currentTrunkFileId; //current trunk file id

/**
* get group name
* @return group name
*/
  public String getGroupName()
  {
      return this.groupName;
  }

/**
* get total disk space in MB
* @return total disk space in MB
*/
  public long getTotalMB()
  {
      return this.totalMB;
  }
  
/**
* get free disk space in MB
* @return free disk space in MB
*/
  public long getFreeMB()
  {
      return this.freeMB;
  }

/**
* get trunk free space in MB
* @return trunk free space in MB
*/
  public long getTrunkFreeMB()
  {
      return this.trunkFreeMB;
  }

/**
* get storage server count in this group
* @return storage server count in this group
*/
  public int getStorageCount()
  {
      return this.storageCount;
  }
  
/**
* get active storage server count in this group
* @return active storage server count in this group
*/
  public int getActiveCount()
  {
      return this.activeCount;
  }
  
/**
* get storage server port
* @return storage server port
*/
  public int getStoragePort()
  {
      return this.storagePort;
  }
  
/**
* get storage server HTTP port
* @return storage server HTTP port
*/
  public int getStorageHttpPort()
  {
      return this.storageHttpPort;
  }

/**
* get current storage server index to upload file
* @return current storage server index to upload file
*/
  public int getCurrentWriteServer()
  {
      return this.currentWriteServer;
  }
  
/**
* get store base path count of each storage server
* @return store base path count of each storage server
*/
  public int getStorePathCount()
  {
      return this.storePathCount;
  }
  
/**
* get sub dir count per store path
* @return sub dir count per store path
*/
  public int getSubdirCountPerPath()
  {
      return this.subdirCountPerPath;
  }
  
/**
* get current trunk file id
* @return current trunk file id
*/
  public int getCurrentTrunkFileId()
  {
      return this.currentTrunkFileId;
  }
  
/**
* set fields
* @param bs byte array
* @param offset start offset
*/
    public void setFields(byte[] bs, int offset)
    {
        this.groupName = stringValue(bs, offset, fieldsArray[FIELD_INDEX_GROUP_NAME]);
        this.totalMB = longValue(bs, offset, fieldsArray[FIELD_INDEX_TOTAL_MB]);
        this.freeMB = longValue(bs, offset, fieldsArray[FIELD_INDEX_FREE_MB]);
        this.trunkFreeMB = longValue(bs, offset, fieldsArray[FIELD_INDEX_TRUNK_FREE_MB]);
        this.storageCount = intValue(bs, offset, fieldsArray[FIELD_INDEX_STORAGE_COUNT]);
      this.storagePort = intValue(bs, offset, fieldsArray[FIELD_INDEX_STORAGE_PORT]);
      this.storageHttpPort = intValue(bs, offset, fieldsArray[FIELD_INDEX_STORAGE_HTTP_PORT]);
      this.activeCount = intValue(bs, offset, fieldsArray[FIELD_INDEX_ACTIVE_COUNT]);
      this.currentWriteServer = intValue(bs, offset, fieldsArray[FIELD_INDEX_CURRENT_WRITE_SERVER]);
      this.storePathCount = intValue(bs, offset, fieldsArray[FIELD_INDEX_STORE_PATH_COUNT]);
      this.subdirCountPerPath = intValue(bs, offset, fieldsArray[FIELD_INDEX_SUBDIR_COUNT_PER_PATH]);
      this.currentTrunkFileId = intValue(bs, offset, fieldsArray[FIELD_INDEX_CURRENT_TRUNK_FILE_ID]);
    }

/**
* get fields total size
* @return fields total size
*/
    public static int getFieldsTotalSize()
    {
        return fieldsTotalSize;
    }
}
